草庐IT

Java BufferedImage 内存消耗

全部标签

c++ - 我可以通过使用多线程更快地分配内存吗?

如果我创建一个保留1kb整数数组int[1024]的循环,并且我希望它分配10000个数组,我可以通过从多个线程运行内存分配来使其更快吗?我希望它们在堆中。假设我有一个多核处理器来完成这项工作。我已经试过了,但是它降低了性能。我只是想知道,我是不是编写了错误的代码,还是我对内存分配一无所知?答案是否取决于操作系统?如果可以,请告诉我它在不同平台上的工作原理。编辑:整数数组分配循环只是一个简化的例子。不要费心告诉我如何改进它。 最佳答案 这取决于很多事情,但主要是:操作系统你正在使用的malloc的实现操作系统负责分配您的进程可以访问

c++ - 从被调用者的角度来看,如何检测内存是动态的还是静态的?

注意:当我在这里说“静态字符串”时,我指的是realloc无法处理的内存。您好,我已经编写了一个带有char*参数的过程,如果内存无法通过realloc重新定位/调整大小,我想创建一个拷贝。事实上,该过程是一个“繁重”的字符串处理器,因此不管它是否是静态的,无知和复制字符串肯定会在未来导致一些内存开销/处理问题。我曾尝试使用异常处理程序来修改静态字符串,应用程序只是在没有任何通知的情况下退出。我退后一步,看着C说:“我没有印象。”如果我听说过,那将是一个异常(exception)。我尝试使用异常处理程序在静态变量上调用realloc...Glib报告说它找不到结构的一些私有(priva

c++ - 为什么从 DLL 内部分配的内存在 FreeLibrary() 之后变得无效?

我今天遇到了这个错误,原来是因为我在调用FreeLibrary()后使用了一个字符串从我的DLL中分配。这是一个重现崩溃的简单示例。这进入DLL:voiddllFunc(char**output){*output=strdup("Hello");//strdupusesmalloc}这是在加载DLL的EXE中:voidexeFunc(){char*output;dllFunc(&output);std::strings1=output;//Thissucceeds.FreeLibrary(dll);std::strings2=output;//Thiscrasheswithaccess

c++ - 如果缩小分配的内存大小,还要检查 realloc() 吗?

当您调用realloc()时,您应该在将返回的指针分配给作为参数传递给函数的指针之前检查函数是否失败...我一直遵守这条规则。当您确定内存将被截断而不是增加时,是否有必要遵循此规则?我从未见过它失败。只是想知道我是否可以保存一些说明。 最佳答案 realloc可以自行决定将block复制到新地址,而不管新大小是更大还是更小。如果malloc实现需要新分配以“缩小”内存块(例如,如果新大小需要将内存块放在不同的分配池中),这可能是必要的。这在glibcdocumentation中有说明。:Inseveralallocationimpl

c++ - 引用会导致内存泄漏吗?

这个问题在这里已经有了答案:Returningtemporaryobjectandbindingtoconstreference[duplicate](1个回答)关闭7年前。考虑以下C++代码。structfoo{std::stringvalue;}inlinefoobar(){return{"42"};}现在假设我有一个以下列方式使用bar()的函数。std::stringmy_func(){constauto&x=bar();returnx.value;}这是否泄漏内存因为my_func只持有对x的引用?或者在my_func终止后x是否仍然被清理?我知道这不是应该使用引用的方式。但

c++ - 优化长时间的内存读写

我有一个名为reorder.cc的源文件,如下所示:voidreorder(float*output,float*input){output[56]=input[0];output[57]=input[1];output[58]=input[2];output[59]=input[3];output[60]=input[4];...output[75]=input[19];output[76]=input[20];output[77]=input[21];output[78]=input[22];output[79]=input[23];output[80]=input[24];...

c++ - 变量的 block 结构内存分配

for(inti=0;i在这里,我想知道变量x的内存是否会被分配两次,或者该值是否在退出第二个block后才重置并且内存只分配一次(对于x)? 最佳答案 从C编程模型的角度来看,x的两个定义是两个完全不同的对象。内部block中的赋值不会影响外部block中x的值。此外,循环的每次迭代的定义也算作不同的对象。在一次迭代中为任一x赋值不会影响后续迭代中的x。就实际实现而言,假设未进行优化,有两种常见情况。如果您打开了优化,您的代码可能会被丢弃,因为编译器很容易发现循环对它之外的任何东西都没有影响,除了i。两种常见的场景是变量存储在栈中

C++ 悬挂指针和内存泄漏

我很难理解如何区分悬挂指针和内存泄漏。最近的一个作业有几个问题很纳闷,看了之后还是很纳闷。我不希望有人为我做功课,我希望能够理解为什么事情是这样的,如果这有意义的话。那么,作业:鉴于声明:int*ptrA,*ptrB;判断下面的每个代码段是否会导致内存泄漏、悬空指针或两者都不会。画图来帮忙。我猜这没问题,因为ptrA已经指向内存中的某些内容,所以这既不是悬挂指针也不是内存泄漏。ptrA=newint;ptrB=newint;*ptrA=345;ptrB=ptrA;我猜这是一个悬垂指针,因为345已从内存中释放,所以ptrB没有指向任何内容。ptrA=newint;*ptrA=345;p

c++ - 在 C++ 中为 3D 数组分配连续内存

我能够分配连续内存以在C++中分配二维数组。我不知道如何为3D阵列做。我已经阅读了一些帖子,但我无法想出解决方案。#includeusingnamespacestd;intmain(intargc,char**argv){cout 最佳答案 具有P平面的3d数组,每个平面都有R行和C列将需要P*R*C元素。您可以立即分配它们,例如:Element*p=newElement[P*R*C];然后访问坐标(p,r,c)处的元素,您可以使用公式:intindex=(p*R+r)*C+c;为了让事情变得可读,一个简单的解决方案是创建一个类te

c++ - 内存使用对算法复杂度的影响

我正在阅读关于C++STL算法的NicolaiJosuttis书。对于很多算法比如stable_sort(),他提到算法的复杂度n*log(n)如果有足够的内存可用,否则就是n*log(n)*log(n)。我的问题是内存使用如何影响复杂性?STL是如何检测到这种情况的? 最佳答案 查看gcc的STL,您会在stl_algo.h中找到inplace_merge.这是合并排序的传统合并实现,复杂度为O(N),使用与输入大小相同的缓冲区。此缓冲区是通过_Temporary_buffer分配的,来自stl_tempbuf.h.这会调用get